<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<![endif]-->
<title>VIM 中文帮助: Vim 和 Vim 脚本的测试</title>
<link rel="stylesheet" href="vim-stylesheet.css" type="text/css" />
<link rel="canonical" href="https://yianwillis.github.io/vimcdoc/doc/testing.html" />
<script type="text/javascript" src="vimcdoc.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<nav id=banner>
<form action=tags.html target="tag_iframe">
  <input type="text" name="tag" id="tag" placeholder="标签搜索">
</form>
<iframe name="tag_iframe" src=""></iframe>
<a href="help.html">帮助总览</a> &middot;
<hr/>
<a href="quickref.html">快速参考</a> &middot;
<a href="index.html">命令索引</a> &middot;
<a href="eval.html#functions">函数列表</a> &middot;
<a href="quickref.html#option-list">选项列表</a> &middot;
<hr/>
<a href="usr_toc.html">用户手册</a> &middot;
<a href="help.html#reference_toc">参考手册</a> &middot;
</nav>

<header>
<h2>testing</h2>
</header>
<article id=outer>
<section class=inner>
<b class="vimtag"> <a name="testing.txt">testing.txt</a> </b>   适用于 Vim 9.0 版本。   最近更新: 2023年2月


                  <code class="vim">VIM 参考手册    by Bram Moolenaar</code>
                                <code class="vim">译者</code>: Willis


测试 Vim 和 Vim 脚本                            <b class="vimtag"> <a name="testing-support">testing-support</a> </b>

 <a href="eval.html#eval.txt">eval.txt</a>  说明表达式的计算。此文件描述 Vim 脚本中编写测试的细节。这可用于 Vim
自身和插件的测试。

1. 测试 Vim                              <a href="testing.html#testing">testing</a> 
2. 测试函数                              <a href="testing.html#test-functions-details">test-functions-details</a> 
3. 断言函数                              <a href="testing.html#assert-functions-details">assert-functions-details</a> 

</section><hr class="doubleline" /><section class=inner>
<h4>1. 测试 Vim                                             <b class="vimtag"> <a name="testing">testing</a> </b></h4>
Vim 在编译后可以进行测试，通常用 "make test" 进行。
这些测试位于目录 "src/testdir"。

在不同的时间点，加入了两种不同类型的测试:
        test20.in               最老的，只用于微小和小编译版本
        test_something.vim      新风格测试

                                                <b class="vimtag"> <a name="new-style-testing">new-style-testing</a> </b>
新写的测试需用新风格的测试。测试脚本命名方式为 test_<code class="special">&lt;feature&gt;</code>.vim (把
<code class="special">&lt;feature&gt;</code> 换成待测试的功能名)。这些测试使用  <a href="testing.html#assert_equal()">assert_equal()</a>  之类的函数，以便
在同一处地方维护测试命令和期待的结果。
                                                <b class="vimtag"> <a name="old-style-testing">old-style-testing</a> </b>
这些测试只用于在没有  <a href="various.html#+eval">+eval</a>  特性时测试 Vim。

更多信息可见文件 src/testdir/README.txt。

</section><hr class="doubleline" /><section class=inner>
<h4>2. 测试函数                                     <b class="vimtag"> <a name="test-functions-details">test-functions-details</a> </b></h4>
test_alloc_fail(<code class="special">{id}</code>, <code class="special">{countdown}</code>, <code class="special">{repeat}</code>)            <b class="vimtag"> <a name="test_alloc_fail()">test_alloc_fail()</a> </b>
                用于测试: 如果调用了 <code class="special">{id}</code> 指定的内存分配，<code class="special">{countdown}</code> 减一，到
                零时，让内存分配失败 <code class="special">{repeat}</code> 次。如果 <code class="special">{repeat}</code> 小于一，失败一
                次。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetAllocId()-&gt;test_alloc_fail()</code>
<code class="example"></code>
<code class="example"></code>
test_autochdir()                                        <b class="vimtag"> <a name="test_autochdir()">test_autochdir()</a> </b>
                设置标志位，在 Vim 启动过程结束之前，打开 <a href="options.html#'autochdir'">'autochdir'</a> 的效果。


test_feedinput(<code class="special">{string}</code>)                                <b class="vimtag"> <a name="test_feedinput()">test_feedinput()</a> </b>
                <code class="special">{string}</code> 中的字符会如果是用户键入的那样，排队依次等待处理。使
                用一个低层输入缓冲区。此函数只适用于  <a href="builtin.html#+unix">+unix</a>  或 GUI 运行时。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetText()-&gt;test_feedinput()</code>
<code class="example"></code>
<code class="example"></code>
test_garbagecollect_now()                        <b class="vimtag"> <a name="test_garbagecollect_now()">test_garbagecollect_now()</a> </b>
                类似于 garbagecollect()，但立即执行。只能通过直接调用，以避免
                内部保存任何结构，而调用任何函数前，必须置位  <a href="eval.html#v:testing">v:testing</a>  。
                <b class="vimtag"> <a name="E1142">E1142</a> </b>
                不能在 :def 函数里调用，因为堆栈上的变量会被释放。


test_garbagecollect_soon()                       <b class="vimtag"> <a name="test_garbagecollect_soon()">test_garbagecollect_soon()</a> </b>
                就像在 main 循环中那样，设置标志位来调用垃圾清理器。仅用于测
                试。


test_getvalue(<code class="special">{name}</code>)                                   <b class="vimtag"> <a name="test_getvalue()">test_getvalue()</a> </b>
                取得内部变量的值。支持以下的 <code class="special">{name}</code> 值:
                        need_fileinfo

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetName()-&gt;test_getvalue()</code>

                                                <b class="vimtag"> <a name="test_gui_event()">test_gui_event()</a> </b>
test_gui_event(<code class="special">{event}</code>, <code class="special">{args}</code>)
                生成 GUI <code class="special">{event}</code>，使用参数 <code class="special">{args}</code>，用于测试 Vim 功能。只在 GUI
                运行时才能用此函数。

                <code class="special">{event}</code> 是字符串，支持的值是:
                    "dropfiles" 在窗口上放置一个或多个文件。
                    "findrepl"  搜索和替代文本。
                    "mouse"     鼠标按钮点击事件。
                    "scrollbar" 移动或拖动滚动条。
                    "key"       发送低层键盘事件。
                    "tabline"   用鼠标选择标签页。
                    "tabmenu"   选择标签页行的菜单项。

                <code class="special">{args}</code> 为字典，包含事件需要的参数。

                "dropfiles":
                  在指定窗口上放置一个或多个文件。<code class="special">{args}</code> 里支持的项目是:
                    files:      文件名列表
                    row:        窗口行号
                    col:        窗口列号
                    modifiers:  键修饰符。支持的值是:
                                    0x4 Shift
                                    0x8 Alt
                                   0x10 Ctrl
                  文件会加入  <a href="editing.html#argument-list">argument-list</a> ，在窗口里编辑 <code class="special">{files}</code> 的首个文
                  件。详见  <a href="gui.html#drag-n-drop">drag-n-drop</a> 。仅当  <a href="gui.html#drop_file">drop_file</a>  特性存在时才能使用
                  此事件。

                "findrepl":
                  <code class="notvi">{仅当 GUI 有查找/替代对话框时才可用}</code>
                  执行文本的搜索和替代。<code class="special">{args}</code> 里支持的项目是:
                    find_text:  搜索的文本。
                    repl_text:  替代文本。
                    flags:      控制搜索/替代的标志位。支持的值是:
                                    1   搜索下个字符串 (搜索对话框)
                                    2   搜索下个字符串 (替代对话框)
                                    3   替代字符串一次
                                    4   替代全部字符串
                                    8   只匹配完整单词
                                   16   匹配大小写
                    forward:    设为 1 时正向搜索。

                "mouse":
                  注入鼠标按钮点击或鼠标移动事件。<code class="special">{args}</code> 里支持的项目是:
                    button:     鼠标按钮。支持的值是:
                                    0   鼠标左键
                                    1   鼠标中键
                                    2   鼠标右键
                                    3   鼠标键释放
                                    4   鼠标滚轮下滚
                                    5   鼠标滚轮上滚
                                    6   鼠标滚轮左滚
                                    7   鼠标滚轮右滚
                    row:        鼠标点击行号。Vim 窗口的首行为 1，末行为
                                <a href="options.html#'lines'">'lines'</a>。
                    col:        鼠标点击列号。<code class="special">{col}</code> 的最大值为 <a href="options.html#'columns'">'columns'</a>。
                    multiclick: 设为 1 时注入多点击鼠标事件。
                    modifiers:  键修饰符。支持的值是:
                                    4   按了 shift
                                    8   按了 alt
                                   16   按了 ctrl
                    move:       可选；如果给出且为 TRUE，生成鼠标移动事件。
                                只使用 <code class="special">{args}</code> 里 row: 和 col: 且为必须；取决于
                                "cell"，它们被解释为像素或屏幕单元格。
                                仅当置位了 <a href="options.html#'mousemoveevent'">'mousemoveevent'</a> 或弹出窗口使用鼠标
                                移动事件时才生成事件。
                    cell:       可选: 如果给出且为 TRUE，"move" 使用屏幕单元格
                                而不是像素位置

                "scrollbar":
                  设置或拖动左侧、右侧或水平滚动条。仅当滚动条确实存在时才可
                  用。
                  <code class="special">{args}</code> 里支持的项目是:
                    which:      滚动条。支持的值是:
                                    left  当前窗口的左侧滚动条
                                    right 当前窗口的右侧滚动条
                                    hor   水平滚动条
                    value:      滚动量。对垂直滚动条而言，<code class="special">{value}</code> 可取值 1 到
                                缓冲区行数。对水平滚动条而言，<code class="special">{value}</code> 可取值 1
                                到最大的行长，假定 <a href="options.html#'wrap'">'wrap'</a> 未置位。
                    dragging:   为 1 时拖动滚动条，为 0 时点击滚动条。

                "key":
                  发送低层键盘事件 (如释放键或按下键)。
                  目前只支持 MS-Windows。
                  <code class="special">{args}</code> 里支持的项目是:
                    event:      支持的字符串值是:
                                    keyup   生成 keyup 事件
                                    keydown 生成 keydown 事件
                    keycode:    keyup 或 keydown 事件使用的键码。
                                                                <b class="vimtag"> <a name="E1291">E1291</a> </b>

                "tabline":
                  在标签页行上注入鼠标点击事件以选择标签页。<code class="special">{args}</code> 里支持的项
                  目是:
                    tabnr:      标签页号

                "tabmenu":
                  注入事件以选择标签页行的菜单项。<code class="special">{args}</code> 里支持的项目是:
                    tabnr:      标签页号
                    item:       标签页菜单项号。1 代表首个菜单项，2 代表第二个
                                项目，依此类推。

                注入 GUI 事件后，可能应调用  <a href="builtin.html#feedkeys()">feedkeys()</a>  以处理这些事件，如: 
<code class="example">                        call feedkeys("y", 'Lx!')</code>

                成功加入事件后返回 TRUE，出错时返回 FALSE。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetEvent()-&gt;test_gui_event({args})</code>

test_ignore_error(<code class="special">{expr}</code>)                        <b class="vimtag"> <a name="test_ignore_error()">test_ignore_error()</a> </b>
                忽略包含 <code class="special">{expr}</code> 的任何错误。显示正常的消息来替代。
                只用于测试，因为那里 try/catch 不能用于捕捉错误 (因为跳过了下
                面的代码)。
                <code class="special">{expr}</code> 按本义使用，不用作模式。
                如果 <code class="special">{expr}</code> 为字符串 "RESET"，清空忽略错误的列表。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetErrorText()-&gt;test_ignore_error()</code>
<code class="example"></code>
<code class="example"></code>
test_mswin_event(<code class="special">{event}</code>, <code class="special">{args}</code>)               <b class="vimtag"> <a name="test_mswin_event()">test_mswin_event()</a> </b>
                生成低层 MS-Windows <code class="special">{event}</code>，使用参数 <code class="special">{args}</code>，用于测试 Vim 功
                能。支持 MS-Windows GUI 和控制台。

                <code class="special">{event}</code> 是字符串，支持的值是:
                    "mouse"     鼠标事件。
                    "key"       键盘事件。

                "mouse":
                  注入鼠标按钮点击或鼠标移动事件。<code class="special">{args}</code> 里支持的项目是:
                    button:     鼠标按钮。支持的值是:
                                    0   鼠标右键
                                    1   鼠标中键
                                    2   鼠标左键
                                    3   鼠标键释放
                                    4   鼠标滚轮下滚
                                    5   鼠标滚轮上滚
                                    6   鼠标滚轮左滚
                                    7   鼠标滚轮右滚
                    row:        鼠标点击行号。Vim 窗口的首行为 1，末行为
                                <a href="options.html#'lines'">'lines'</a>。
                    col:        鼠标点击列号。<code class="special">{col}</code> 的最大值为 <a href="options.html#'columns'">'columns'</a>。
                                <code class="note">注意</code>: 控制台应用里 row 和 col 总解释为屏幕单元
                                格。GUI 里取决于 "cell"，也可能解释为像素值。
                    multiclick: 设为 1 时注入多点击鼠标事件。
                    modifiers:  键修饰符。支持的值是:
                                    4   按了 shift
                                    8   按了 alt
                                   16   按了 ctrl
                    move:       可选；如果给出且为 TRUE，生成鼠标移动事件。
                                只使用 <code class="special">{args}</code> 里 row: 和 col: 且为必须。
                                仅当置位了 <a href="options.html#'mousemoveevent'">'mousemoveevent'</a> 或弹出窗口使用鼠标
                                移动事件时才生成事件。
                    cell:       GUI 可选: 如果给出且为 TRUE，"move" 使用屏幕单
                                元格而不是像素位置。控制台不使用。

                "key":
                  发送低层键盘事件 (如释放键或按下键)。
                  <code class="special">{args}</code> 里支持的项目是:
                    event:      支持的字符串值是:
                                    keyup   生成 keyup 事件
                                    keydown 生成 keydown 事件
                    keycode:    keyup 或 keydown 事件使用的键码。
                    modifiers:  可选；键修饰符。
                                支持的值是:
                                    2   按了 shift
                                    4   按了 ctrl
                                    8   按了 alt
                                <code class="note">注意</code>: 这些值和鼠标修饰符的不同。
                    execute:    可选。类似于  <a href="builtin.html#feedkeys()">feedkeys()</a>  模式 x。
                                包含且设为真 (非零) 时，Vim 会处理任何缓冲的未
                                处理的键盘事件。设置且为真时，其它的 <code class="special">{args}</code>
                                项目均可选。

                成功加入或执行事件后返回 TRUE，出错时返回 FALSE。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetEvent()-&gt;test_mswin_event({args})</code>


test_null_blob()                                        <b class="vimtag"> <a name="test_null_blob()">test_null_blob()</a> </b>
                返回 null  <a href="eval.html#Blob">Blob</a> 。仅用于测试。


test_null_channel()                                     <b class="vimtag"> <a name="test_null_channel()">test_null_channel()</a> </b>
                返回 null  <a href="eval.html#Channel">Channel</a> 。仅用于测试。
                <code class="notvi">{仅当编译时加入  <a href="various.html#+channel">+channel</a>  特性才有效}</code>


test_null_dict()                                        <b class="vimtag"> <a name="test_null_dict()">test_null_dict()</a> </b>
                返回 null  <a href="eval.html#Dict">Dict</a> 。仅用于测试。


test_null_function()                                    <b class="vimtag"> <a name="test_null_function()">test_null_function()</a> </b>
                返回 null  <a href="eval.html#Funcref">Funcref</a> 。仅用于测试。


test_null_job()                                         <b class="vimtag"> <a name="test_null_job()">test_null_job()</a> </b>
                返回 null  <a href="eval.html#Job">Job</a> 。仅用于测试。
                <code class="notvi">{仅当编译时加入  <a href="various.html#+job">+job</a>  特性才有效}</code>


test_null_list()                                        <b class="vimtag"> <a name="test_null_list()">test_null_list()</a> </b>
                返回 null  <a href="eval.html#List">List</a> 。仅用于测试。


test_null_partial()                                     <b class="vimtag"> <a name="test_null_partial()">test_null_partial()</a> </b>
                返回 null  <a href="eval.html#Partial">Partial</a> 。仅用于测试。


test_null_string()                                      <b class="vimtag"> <a name="test_null_string()">test_null_string()</a> </b>
                返回 null  <a href="eval.html#String">String</a> 。仅用于测试。


test_option_not_set(<code class="special">{name}</code>)                             <b class="vimtag"> <a name="test_option_not_set()">test_option_not_set()</a> </b>
                复位指示选项 <code class="special">{name}</code> 已设置过的标志位。就像看起来此选项还使用缺
                省值那样。这样来用: 
<code class="example">                        set ambiwidth=double</code>
<code class="example">                        call test_option_not_set('ambiwidth')</code>
                现在 <a href="options.html#'ambiwidth'">'ambiwidth'</a> 选项的行为就像它从未被改变过一样，即使它的值
                是 "double"。
                仅用于测试！

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetOptionName()-&gt;test_option_not_set()</code>
<code class="example"></code>
<code class="example"></code>
test_override(<code class="special">{name}</code>, <code class="special">{val}</code>)                            <b class="vimtag"> <a name="test_override()">test_override()</a> </b>
                覆盖 Vim 内部处理的部分行为，用于运行测试。只能用于 Vim 测试！
                如果 <code class="special">{val}</code> 非零，打开覆盖行为，<code class="special">{val}</code> 为零时，关闭覆盖行为。
                <code class="special">{name}</code> 目前支持的值是:

<code class="section">                <code class="special">{name}</code>       <code class="special">{val}</code> 非零的效果 </code>
                alloc_lines  在已分配内存内为每个缓冲区行复制备份，以便
                             valgrind 可以发现内存访问错误
                autoload     `import autoload` 会立即载入脚本，而不是延迟到项
                             目使用时
                char_avail   屏蔽 char_avail() 函数
                nfa_fail     使 NFA 正则表达式引擎失败以强制回归到旧引擎
                no_query_mouse  "dec" 终端不查询鼠标位置
                no_wait_return  置位 "no_wait_return" 标志位。不被 "ALL" 复
                                位。
                redraw       屏蔽 redrawing() 函数
                redraw_flag  忽略 RedrawingDisabled 标志位
                starting     复位 "starting" 变量，见下
                term_props   检测到版本字符串时，复位所有终端属性
                ui_delay     用于 ui_delay() 的以毫秒计的时间；覆盖缺省使用的
                             不多于 3 秒的消息等待时间
                uptime       覆盖 sysinfo.uptime
                vterm_title  用终端窗口运行中的作业来设置窗口标题
                ALL          复位所有覆盖 (不使用 <code class="special">{val}</code>)

                "starting" 用于假定初始化已经完成的测试。因为测试的运行是通过
                运行一个 "starting" 变量为非零的脚本进行的。这通常有好处 (测试
                更快)，但有时会改变行为，使测试不能正常工作。
                以下操作: 
<code class="example">                        call test_override('starting', 1)</code>
                保存 "starting" 的值。以下操作恢复之: 
<code class="example">                        call test_override('starting', 0)</code>
<code class="example"></code>
                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetOverrideVal()-&gt; test_override('starting')</code>
<code class="example"></code>
<code class="example"></code>
test_refcount(<code class="special">{expr}</code>)                                   <b class="vimtag"> <a name="test_refcount()">test_refcount()</a> </b>
                返回 <code class="special">{expr}</code> 的引用计数。如果 <code class="special">{expr}</code> 是没有引用计数的类型，返回
                -1。仅用于测试。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetVarname()-&gt;test_refcount()</code>
<code class="example"></code>
<code class="example"></code>
test_setmouse(<code class="special">{row}</code>, <code class="special">{col}</code>)                             <b class="vimtag"> <a name="test_setmouse()">test_setmouse()</a> </b>
                设置下个鼠标活动所用的鼠标位置。
                <code class="special">{row}</code> 和 <code class="special">{col}</code> 从 1 开始。
                示例: 
<code class="example">                        call test_setmouse(4, 20)</code>
<code class="example">                        call feedkeys("\&lt;LeftMouse&gt;", "xt")</code>
<code class="example"></code>
test_settime(<code class="special">{expr}</code>)                                    <b class="vimtag"> <a name="test_settime()">test_settime()</a> </b>
                设置 Vim 内部使用的时间。目前只用于历史中的时间戳，用于
                viminfo 和撤销。
                值为 1 使 Vim 在<code class="note">警告</code>或信息后不睡眠。
                <code class="special">{expr}</code> 计算结果必须为数值。值为零时恢复正常行为。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetTime()-&gt;test_settime()</code>
<code class="example"></code>
<code class="example"></code>
test_srand_seed([seed])                                 <b class="vimtag"> <a name="test_srand_seed()">test_srand_seed()</a> </b>
                <code class="special">[seed]</code> 给出时用来设置  <a href="builtin.html#srand()">srand()</a>  使用的种子值。不给出时，删除此
                测试用种子。


test_unknown()                                          <b class="vimtag"> <a name="test_unknown()">test_unknown()</a> </b>
                返回未知类型的值。仅用于测试。


test_void()                                             <b class="vimtag"> <a name="test_void()">test_void()</a> </b>
                返回 void 类型的值。仅用于测试。


</section><hr class="doubleline" /><section class=inner>
<h4>3. 断言函数                                     <b class="vimtag"> <a name="assert-functions-details">assert-functions-details</a> </b></h4>

assert_beeps(<code class="special">{cmd}</code>)                                     <b class="vimtag"> <a name="assert_beeps()">assert_beeps()</a> </b>
                执行 <code class="special">{cmd}</code>，如果 <code class="emphasis">不</code> 响铃或可视响铃，加入错误信息到
                 <a href="eval.html#v:errors">v:errors</a> 。
                另见  <a href="testing.html#assert_fails()">assert_fails()</a> 、 <a href="testing.html#assert_nobeep()">assert_nobeep()</a>  和  <a href="eval.html#assert-return">assert-return</a> 。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetCmd()-&gt;assert_beeps()</code>

                                                        <b class="vimtag"> <a name="assert_equal()">assert_equal()</a> </b>
assert_equal(<code class="special">{expected}</code>, <code class="special">{actual}</code> [, <code class="special">{msg}</code>])
                <code class="special">{expected}</code> 不等于 <code class="special">{actual}</code> 时，加入错误信息到  <a href="eval.html#v:errors">v:errors</a> ，并反
                回 1。否则返回零  <a href="eval.html#assert-return">assert-return</a> 。
                没有自动转换，字符串 "4" 不同于数值 4。数值 4 又不同于浮点数
                4.0。不适用 <a href="options.html#'ignorecase'">'ignorecase'</a>，大小写永远敏感。
                省略 <code class="special">{msg}</code> 则生成形如 "Expected <code class="special">{expected}</code> but got <code class="special">{actual}</code>"
                的错误。
                示例: 
<code class="example">        assert_equal('foo', 'bar')</code>
                会在  <a href="eval.html#v:errors">v:errors</a>  加入字符串:
<code class="section">        test.vim line 12: Expected <code class="badlink">'foo'</code> but got <code class="badlink">'bar'</code> </code>

                也可用作  <a href="eval.html#method">method</a> ，基是作为第二个参数传递的: 
<code class="example">                        mylist-&gt;assert_equal([1, 2, 3])</code>
<code class="example"></code>
                                                        <b class="vimtag"> <a name="assert_equalfile()">assert_equalfile()</a> </b>
assert_equalfile(<code class="special">{fname-one}</code>, <code class="special">{fname-two}</code> [, <code class="special">{msg}</code>])
                文件 <code class="special">{fname-one}</code> 和 <code class="special">{fname-two}</code> 不包含相同文本时，加入错误信息
                到  <a href="eval.html#v:errors">v:errors</a> 。
                另见  <a href="eval.html#assert-return">assert-return</a> 。
                文件 <code class="special">{fname-one}</code> 或 <code class="special">{fname-two}</code> 不存在时，错误信息说明这一点。
                最常用于  <a href="terminal.html#terminal-diff">terminal-diff</a> 。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetLog()-&gt;assert_equalfile('expected.log')</code>
<code class="example"></code>
<code class="example"></code>
assert_exception(<code class="special">{error}</code> [, <code class="special">{msg}</code>])                     <b class="vimtag"> <a name="assert_exception()">assert_exception()</a> </b>
                v:exception 不包含 <code class="special">{error}</code> 时，加入错误信息到  <a href="eval.html#v:errors">v:errors</a> 。另见
                 <a href="eval.html#assert-return">assert-return</a> 。
                可用于断言命令抛出例外。使用错误号后加冒号，就不用担心翻译的问
                题: 
<code class="example">                        try</code>
<code class="example">                          commandthatfails</code>
<code class="example">                          call assert_false(1, 'command should have failed')</code>
<code class="example">                        catch</code>
<code class="example">                          call assert_exception('E492:')</code>
<code class="example">                        endtry</code>

                                                        <b class="vimtag"> <a name="assert_fails()">assert_fails()</a> </b>
assert_fails(<code class="special">{cmd}</code> [, <code class="special">{error}</code> [, <code class="special">{msg}</code> [, <code class="special">{lnum}</code> [, <code class="special">{context}</code>]]]])
                执行 <code class="special">{cmd}</code>，如果 <code class="emphasis">不</code> 出错或错误信息中找不到 <code class="special">{error}</code>，加入错误信
                息到  <a href="eval.html#v:errors">v:errors</a> 。另见  <a href="eval.html#assert-return">assert-return</a> 。
                                                        <b class="vimtag"> <a name="E856">E856</a> </b>
                <code class="special">{error}</code> 如为字符串，必须按本义在首个报告的错误中找到。这里最普
                遍的情况是使用错误代码并带上冒号，如 "E123:"。 
<code class="example">                        assert_fails('bad cmd', 'E987:')</code>

                <code class="special">{error}</code> 如为带一或两个字符串的  <a href="eval.html#List">List</a> ，它们被用作模式。首个模
                式匹配首个报告的错误: 
<code class="example">                        assert_fails('cmd', ['E987:.*expected bool'])</code>
                第二个模式，如果提供，则匹配末个报告的错误。
                如果只有一个错误，则两个模式必须都匹配。这可用于检查是否只有一
                个错误。
                要只匹配末个错误，使用空串作为首错模式: 
<code class="example">                        assert_fails('cmd', ['', 'E987:'])</code>

                <code class="special">{msg}</code> 为空时不使用之。可用于传入 <code class="special">{lnum}</code> 参数而获得缺省信息。
                                                        <b class="vimtag"> <a name="E1115">E1115</a> </b>
                <code class="special">{lnum}</code> 存在且非负，且 <code class="special">{error}</code> 参数存在且匹配时，则和错误报告所
                在的行号相比较。这可以是函数中的行号或脚本中的行号。
                                                        <b class="vimtag"> <a name="E1116">E1116</a> </b>
                <code class="special">{context}</code> 存在时，用作模式来匹配 <code class="special">{lnum}</code> 所在的上下文 (脚本名或
                函数名)。

                <code class="note">注意</code> 响铃不作为错误处理，而有些出错的命令只会响铃。为此，可用
                 <a href="testing.html#assert_beeps()">assert_beeps()</a>  断言。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetCmd()-&gt;assert_fails('E99:')</code>
<code class="example"></code>
assert_false(<code class="special">{actual}</code> [, <code class="special">{msg}</code>])                        <b class="vimtag"> <a name="assert_false()">assert_false()</a> </b>
                <code class="special">{actual}</code> 不为假时，加入错误信息到  <a href="eval.html#v:errors">v:errors</a> ，其余类同
                 <a href="testing.html#assert_equal()">assert_equal()</a> 。
                另见  <a href="eval.html#assert-return">assert-return</a> 。
                零值为假值。<code class="special">{actual}</code> 不是数值时，断言失败。
                省略 <code class="special">{msg}</code> 则生成形如 "Expected False but got <code class="special">{actual}</code>" 的错
                误。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetResult()-&gt;assert_false()</code>
<code class="example"></code>
assert_inrange(<code class="special">{lower}</code>, <code class="special">{upper}</code>, <code class="special">{actual}</code> [, <code class="special">{msg}</code>])     <b class="vimtag"> <a name="assert_inrange()">assert_inrange()</a> </b>
                对数值和  <a href="eval.html#Float">Float</a>  值进行断言。<code class="special">{actual}</code> 小于 <code class="special">{lower}</code> 会大于
                <code class="special">{upper}</code> 时，加入错误信息到  <a href="eval.html#v:errors">v:errors</a> 。另见  <a href="eval.html#assert-return">assert-return</a> 。
                省略 <code class="special">{msg}</code> 则生成形如 "Expected range <code class="special">{lower}</code> - <code class="special">{upper}</code>, but
                got <code class="special">{actual}</code>" 的错误。

                                                                <b class="vimtag"> <a name="assert_match()">assert_match()</a> </b>
assert_match(<code class="special">{pattern}</code>, <code class="special">{actual}</code> [, <code class="special">{msg}</code>])
                <code class="special">{pattern}</code> 不匹配 <code class="special">{actual}</code> 时，加入错误信息到  <a href="eval.html#v:errors">v:errors</a> 。另见
                 <a href="eval.html#assert-return">assert-return</a> 。

                <code class="special">{pattern}</code> 的用法类同于  <code class="badlink">=~</code> : 匹配总是假定 <a href="options.html#'magic'">'magic'</a> 置位而
                <a href="options.html#'cpoptions'">'cpoptions'</a> 为空，而忽略 <a href="options.html#'magic'">'magic'</a> 或 <a href="options.html#'cpoptions'">'cpoptions'</a> 的实际值。

                <code class="special">{actual}</code> 作字符串使用，适用自动转换。
                "^" 和 "$" 可用来匹配文本的开始和结尾。两者皆用则可匹配整个文
                本。

                省略 <code class="special">{msg}</code> 则生成形如 "Pattern <code class="special">{pattern}</code> does not match
                <code class="special">{actual}</code>" 的错误。
                示例: 
<code class="example">        assert_match('^f.*o$', 'foobar')</code>
                会在  <a href="eval.html#v:errors">v:errors</a>  加入字符串:
<code class="section">        test.vim line 12: Pattern '^f.*o$' does not match <code class="badlink">'foobar'</code> </code>

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        getFile()-&gt;assert_match('foo.*')</code>

assert_nobeep(<code class="special">{cmd}</code>)                                    <b class="vimtag"> <a name="assert_nobeep()">assert_nobeep()</a> </b>
                运行 <code class="special">{cmd}</code>，如果导致鸣叫或可视响铃，加入错误信息到
                 <a href="eval.html#v:errors">v:errors</a> 。
                另见  <a href="testing.html#assert_beeps()">assert_beeps()</a> 。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetCmd()-&gt;assert_nobeep()</code>

                                                        <b class="vimtag"> <a name="assert_notequal()">assert_notequal()</a> </b>
assert_notequal(<code class="special">{expected}</code>, <code class="special">{actual}</code> [, <code class="special">{msg}</code>])
                和  <a href="testing.html#assert_equal()">assert_equal()</a>  相反: <code class="special">{expected}</code> 等于 <code class="special">{actual}</code> 时，加入错
                误信息到  <a href="eval.html#v:errors">v:errors</a> 。
                另见  <a href="eval.html#assert-return">assert-return</a> 。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        mylist-&gt;assert_notequal([1, 2, 3])</code>
<code class="example"></code>
                                                        <b class="vimtag"> <a name="assert_notmatch()">assert_notmatch()</a> </b>
assert_notmatch(<code class="special">{pattern}</code>, <code class="special">{actual}</code> [, <code class="special">{msg}</code>])
                和  <a href="testing.html#assert_match()">assert_match()</a>  相反: <code class="special">{pattern}</code> 匹配 <code class="special">{actual}</code> 时，加入错
                误信息到  <a href="eval.html#v:errors">v:errors</a> 。
                另见  <a href="eval.html#assert-return">assert-return</a> 。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        getFile()-&gt;assert_notmatch('bar.*')</code>
<code class="example"></code>
<code class="example"></code>
assert_report(<code class="special">{msg}</code>)                                    <b class="vimtag"> <a name="assert_report()">assert_report()</a> </b>
                直接报告测试失败，用字符串 <code class="special">{msg}</code>。总返回一。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetMessage()-&gt;assert_report()</code>
<code class="example"></code>
<code class="example"></code>
assert_true(<code class="special">{actual}</code> [, <code class="special">{msg}</code>])                         <b class="vimtag"> <a name="assert_true()">assert_true()</a> </b>
                <code class="special">{actual}</code> 不为真时，加入错误信息到  <a href="eval.html#v:errors">v:errors</a> ，余类同
                 <a href="testing.html#assert_equal()">assert_equal()</a> 。
                另见  <a href="eval.html#assert-return">assert-return</a> 。
                非零值为真值。<code class="special">{actual}</code> 不是数值时，断言失败。
                省略 <code class="special">{msg}</code> 则生成形如 "Expected True but got <code class="special">{actual}</code>" 的错
                误。

                也可用作  <a href="eval.html#method">method</a> : 
<code class="example">                        GetResult()-&gt;assert_true()</code>
<code class="example"></code>

 vim:tw=78:ts=8:noet:ft=help:norl:
</section>
</article>
<footer>
Generated by vim2html
</footer>
</body>
</html>
